package jsp;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Miss Chen
 * @version 1.0
 * @date 2024年09月04日8:45
 */
@WebServlet("/app")
public class ApplicationServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 方式一：仅限在Servlet中获取
        ServletContext application=getServletContext();
        System.out.println(application);

        //方式二:通用方式，不仅限于Servlet，但是获取时方法的参数必须包含request或者session
        ServletContext application2=request.getServletContext();
        System.out.println(application2);
        //方式三:session去获取
        HttpSession session=request.getSession();
        ServletContext application3=session.getServletContext();
        System.out.println(application3);

        // 上述三种方式均能获得到application对象
        // 且获取到的对象始终是同一个对象
        // 因为在同一个应用中有且仅有一个application


        // 应用场景：
        // 1.获取服务器所在位置
        // 方法参数可以为空，如果为空表示服务器根目录
        String path=application.getRealPath("");
        System.out.println(path);

        path=application.getRealPath("/upload/"+new SimpleDateFormat("yyyyMMdd").format(new Date()));
        System.out.println("path:"+path);
        //此时获取的路径可能并不存在，可以通过后台代码创建对应的目录
        File file=new File(path);
        file.mkdirs();

        // 2.存储数据
        application.setAttribute("msg","HelloMsg");

        // 3.获取全局初始化参数
        String name=application.getInitParameter("name");
        System.out.println("全局初始化参数:"+name);
    }
}
